//
//  StatusViewModel.swift
//  Weibo
//
//  Created by apple on 15/12/11.
//  Copyright © 2015年 idcast. All rights reserved.
//

import UIKit
//没有父类的  首先遵守CustomStringConvertible协议  在重写协议中的方法
class StatusViewModel: CustomStringConvertible {
    ///微博的模型
    var status: Status
    //表格的可重用标示符号
    var cellId: String {
    
        return status.retweeted_status != nil ? StatusRetweetedCellNormrlId : StatusCellNormaId
    }
    ///缓存的行高
    lazy var rowHeight: CGFloat = {
//    print("计算行高\(self.status.text)")
        //1 cell
        //定义cell
        var cell: StatusCell
        //根据是否是转发微博 决定cell的创建
        if self.status.retweeted_status != nil {
            cell = StatusRetweetedCell(style: .Default, reuseIdentifier: StatusRetweetedCellNormrlId)
        } else {
            cell = StatusNormalCell(style: .Default, reuseIdentifier: StatusCellNormaId)
        }

        //记录行高
        return cell.rowHeight(self)
    
    }()
    
    ///用户头像URL 
    var userProfileUrl: NSURL {
    
        return NSURL(string: status.user?.profile_image_url ?? "")!
    }
    ///用户默认头像
    var userDefaultIconView: UIImage {
    
        return UIImage(named: "avatar_default_big")!
    }
    ///用户会员图标
    var userMemberImage: UIImage? {
    
        //根据mbrank 来生成图像

        if status.user?.mbrank > 0 && status.user?.mbrank < 7 {
        
            return UIImage(named: "common_icon_membership_level\(status.user!.mbrank)")
        }
        return nil
    }
    ///用户认证图标
    /// 认证类型，-1：没有认证，0，认证用户，2,3,5: 企业认证，220: 达人
    var userVipImage: UIImage? {
        
        switch(status.user?.verified_type ?? -1) {
        case 0: return UIImage(named: "avatar_vip")
        case 2, 3, 5: return UIImage(named: "avatar_enterprise_vip")
        case 220: return UIImage(named: "avatar_grassroot")
        default: return nil
        }
    }
    ///缩逻图URL数组  是存储型属性
    /// 如果是原创微博，可以有图，可以没有图
    /// 如果是转发微博，一定没有图，retweeted_status 中，可以有图，也可以没有图
    /// 一条微博，最多只有一个 pic_urls 数组
    var thumbnailUrks: [NSURL]?
    
    var retweetedText: String? {
    
        //1 判断是否值转发微博 如果不是直接返回nil
        guard let s = status.retweeted_status else {
        
            return nil
        }
        //2 s 就是转发微博
        return "@" + (s.user?.screen_name ?? "") + ":" + (s.text ?? "")
    }
    
    ///构造函数
    init (status: Status) {
    
        self.status = status
        //根据模型来生成缩逻图的数组
        let urls = status.retweeted_status?.pic_urls ?? status.pic_urls
        
        //根据模型  来生成缩逻图的数组
        if urls?.count > 0 {
        
            //创建缩逻图数组
            thumbnailUrks = [NSURL]()
            //遍历字典数组 数组如果可选 不允许遍历 原因： 数组是通过下标来检索数据的
            for dict in urls! {
            
                //因为字典是按照key值来取值 如果key值错误 会返回nil
                let url = NSURL(string: dict["thumbnail_pic"]!)
                
                //相信服务器返回的url字符串一定能够生成
                thumbnailUrks?.append(url!)
            }
        }
    }
    //描述信息
     var description: String {
        return status.description + "配图数组\(thumbnailUrks ?? [] as NSArray)"
    
    }
}